<?php

/**
 * Project:     Framework G - G Light
 * File:        db.php
 * 
 * For questions, help, comments, discussion, etc., please join to the
 * website www.frameworkg.com
 * 
 * @link http://www.frameworkg.com/
 * @copyright 2013-02-07
 * @author Group Framework G  <info at frameworkg dot com>
 * @version 1.2
 */
class db {

    var $server = C_DB_SERVER; //DB server
    var $user = C_DB_USER; //DB user
    var $pass = C_DB_PASS; //DB password
    var $db = C_DB_DATABASE_NAME; //DB database name
    var $limit = C_DB_LIMIT; //DB limit of elements by page
    var $cn;
    var $numpages;

    public function db() {
        
    }

    //connect to database
    public function connect() {
        $this->cn = mysql_connect($this->server, $this->user, $this->pass);
        if (!$this->cn) {
            die("Failed connection to the database: " . mysql_error());
        }
        if (!mysql_select_db($this->db)) {
            die("Unable to communicate with the database $db: " . mysql_error());
        }
        mysql_query("SET NAMES utf8");
    }

    //function for doing multiple queries
    public function do_operation($operation, $class = NULL) {
        $result = mysql_query($operation, $this->cn);
        if (!$result) {
            $this->throw_sql_exception($class);
        }
    }

    //function for obtain data from db in object form
    private function get_data($operation) {
        $data = array();
        $result = mysql_query($operation, $this->cn) or die(mysql_error($this->cn));
        while ($row = mysql_fetch_object($result)) {
            array_push($data, $row);
        }
        return $data;
    }

    //throw exception to web document
    private function throw_sql_exception($class) {
        $errno = mysql_errno();
        $error = mysql_error();
        $msg = $error . "<br /><br /><b>Error number:</b> " . $errno;
        throw new Exception($msg);
    }

    //for avoid sql injections, this functions cleans the variables
    private function escape_string(&$data) {
        if (is_object($data)) {
            foreach ($data->metadata() as $key => $attribute) {
                if (!is_empty($data->get($key))) {
                    $data->set($key, mysql_real_escape_string($data->get($key)));
                }
            }
        } else if (is_array($data)) {
            foreach ($data as $key => $value) {
                if (!is_array($value)) {
                    $data[$key] = mysql_real_escape_string($value);
                }
            }
        }
    }

    //function for add data to db
    public function insert($options, $object) {
        switch ($options['lvl1']) {
            case "user":
                switch ($options['lvl2']) {
                    case "normal":
                        $hasher = new PasswordHash(8, FALSE);
                        $object->set('password', $hasher->HashPassword($object->get('password')));
                        unset($hasher);
                        $name = mysql_real_escape_string($object->get('name'));
                        $user = mysql_real_escape_string($object->get('user'));
                        $type = mysql_real_escape_string($object->get('type'));
                        $password = mysql_real_escape_string($object->get('password'));
                        $this->do_operation("INSERT INTO user (name, user, type, password, email) VALUES ('$name', '$user',  '$type', '$password','asd@123');");

                        break;
                }
                break;
            case "empleado":
                switch ($options['lvl2']) {
                    case "normal":
                        $hasher = new PasswordHash(8, FALSE);
                        $object->set('contrasena', $hasher->HashPassword($object->get('contrasena')));
                        unset($hasher);
                        $cedula = mysql_real_escape_string($object->get('cedula'));
                        $nombre = mysql_real_escape_string($object->get('nombre')); 
                        $fecha_nacimiento= mysql_real_escape_string($object->get('fecha_nacimiento'));
                        $sexo = mysql_real_escape_string($object->get('sexo'));
                        $cargo = mysql_real_escape_string($object->get('cargo'));
                        $contrasena = mysql_real_escape_string($object->get('contrasena'));
                        $this->do_operation("INSERT INTO empleado (cedula, nombre, fecha_nacimiento,  sexo, cargo, contrasena) VALUES ('$cedula', '$nombre', '$fecha_nacimiento', '$sexo', '$cargo', '$contrasena');");

                        break;
                }
                break;
            
           case "sonido":
                switch ($options['lvl2']) {
                    case "normal":
                        $id = mysql_real_escape_string($object->get('id'));
                        $nombre = mysql_real_escape_string($object->get('nombre')); 
                        $descripcion= mysql_real_escape_string($object->get('descripcion'));
                        $intencidad = mysql_real_escape_string($object->get('intensidad'));
                        $duracion = mysql_real_escape_string($object->get('duracion'));
                        $tipo = mysql_real_escape_string($object->get('tipo'));
                        $ingeniero_sonido = mysql_real_escape_string($object->get('ingeniero_sonido'));
                        $videojuego = mysql_real_escape_string($object->get('videojuego'));
                        $movimiento = mysql_real_escape_string($object->get('movimiento'));
                        
                        $this->do_operation("INSERT INTO sonido (id, nombre, descripcion,  intensidad, duracion, tipo,ingeniero_sonido, videojuego, movimiento) VALUES ('$id', '$nombre', '$descripcion', '$intencidad', '$duracion', '$tipo','$ingeniero_sonido','$videojuego','$movimiento');");
                        
                        break;
                }
                break;
            
            case "videojuego":
                switch ($options['lvl2']) {
                    case "normal":
                      
                        $nombre = mysql_real_escape_string($object->get('nombre')); 
                        $descripcion= mysql_real_escape_string($object->get('descripcion'));
                        $objetivo = mysql_real_escape_string($object->get('objetivo'));
                        $genero = mysql_real_escape_string($object->get('genero'));
                        $modalidad = mysql_real_escape_string($object->get('modalidad'));
                        $clasificacion = mysql_real_escape_string($object->get('clasificacion'));
                        $gerente = mysql_real_escape_string($object->get('gerente'));
                        $this->do_operation("INSERT INTO videojuego ( nombre, descripcion, objetivo, genero, modalidad, clasificacion, gerente) VALUES ( '$nombre', '$descripcion', '$objetivo', '$genero', '$modalidad','$clasificacion','$gerente');");

                        break;
                }
                break;
            
            case "nivel":
                switch ($options['lvl2']) {
                    case "normal":
                        $id = mysql_real_escape_string($object->get('id'));
                        $nombre = mysql_real_escape_string($object->get('nombre')); 
                        $dificultad= mysql_real_escape_string($object->get('dificultad'));
                        $mision = mysql_real_escape_string($object->get('mision'));
                        $diseñador = mysql_real_escape_string($object->get('diseñador'));
                        $videojuego = 1;
                           
                        $this->do_operation("INSERT INTO nivel (id, nombre, dificultad, mision, diseñador, videojuego) VALUES ('$id', '$nombre', '$dificultad', '$mision', '$diseñador', '$videojuego');");
                    break;
                }
                break;
            
                case "historia":
                    switch ($options['lvl2']){
                        case "normal":
                            $id = mysql_real_escape_string($object->get('id'));
                            $titulo = mysql_real_escape_string($object->get('titulo'));
                            $argumento = mysql_real_escape_string($object->get('argumento'));
                            $guion = mysql_real_escape_string($object->get('guion'));
                            $escritor = mysql_real_escape_string($object->get('escritor'));
                            $videojuego = mysql_real_escape_string($object->get('videojuego'));
                            $this->do_operation("INSERT INTO historia (id, titulo, argumento, guion, escritor, videojuego) VALUES ('$id', '$titulo', '$argumento', '$guion', '$escritor', '$videojuego');");
                        break;
                    }
                break;
                        
                case "movimiento":
                    switch ($options['lvl2']){
                        case "normal":
                            $id = mysql_real_escape_string($object->get('id'));
                            $nombre = mysql_real_escape_string($object->get('nombre'));
                            $descripcion = mysql_real_escape_string($object->get('descripcion'));
                            $accion = mysql_real_escape_string($object->get('accion'));
                            $velocidad = mysql_real_escape_string($object->get('velocidad'));
                            $animador = mysql_real_escape_string($object->get('animador'));
                            $this->do_operation("INSERT INTO movimiento (id, nombre, descripcion, accion, velocidad, animador) VALUES ('$id', '$nombre', '$descripcion', '$accion', '$velocidad', '$animador');");
                        break;
                    }
                break;
	 case "version":
                switch ($options['lvl2']) {
                    case "normal":
                        $id= mysql_real_escape_string($object->get('videojuego'));
                        $tipo = mysql_real_escape_string($object->get('tipo')); 
                        $videojuego= mysql_real_escape_string($object->get('videojuego'));
                        $gerente = mysql_real_escape_string($object->get('gerente'));                        
                        $this->do_operation("INSERT INTO version ( id,tipo, videojuego, gerente) VALUES ('$id', '$tipo','$videojuego', '$gerente');");
                     break;
                }
                break;
            case "item":
                switch ($options['lvl2']) {
                    case "normal":
                        $nombre = mysql_real_escape_string($object->get('nombre')); 
                        $descripcion= mysql_real_escape_string($object->get('descripcion'));
                        $tipo = mysql_real_escape_string($object->get('tipo'));                           
                        $this->do_operation("INSERT INTO item ( nombre, descripcion, tipo) VALUES ( '$nombre','$descripcion', '$tipo');");
                   break;
                }
                break;
            case "personaje":
                switch ($options['lvl2']) {
                    case "normal":
                        
                        $nombre = mysql_real_escape_string($object->get('nombre')); 
                        $descripcion= mysql_real_escape_string($object->get('descripcion'));
                        $tipo = mysql_real_escape_string($object->get('tipo'));                           
                        $comportamiento = mysql_real_escape_string($object->get('comportamiento'));                           
                        $habilidad = mysql_real_escape_string($object->get('habilidad'));
                        $videojuego = mysql_real_escape_string($object->get('videojuego'));
                        $this->do_operation("INSERT INTO personaje ( nombre, descripcion, tipo, comportamiento, habilidad, videojuego) VALUES ( '$nombre','$descripcion', '$tipo','$comportamiento','$habilidad','$videojuego');");
                   break;
                }
                break;
         
            default: break;
        }
    }

    //function for edit data from db
    public function update($options, $object) {
        switch ($options['lvl1']) {
            case "user":
                switch ($options['lvl2']) {
                    case "normal":
                        //
                        break;
                }
                break;
		case "videojuego":
                switch ($options['lvl2']) {
                    case "update":
                        $id = mysql_real_escape_string($object->get('id'));
                        $nombre = mysql_real_escape_string($object->get('nombre')); 
                        $descripcion= mysql_real_escape_string($object->get('descripcion'));
                        $objetivo = mysql_real_escape_string($object->get('objetivo'));
                        $genero = mysql_real_escape_string($object->get('genero'));
                        $modalidad = mysql_real_escape_string($object->get('modalidad'));
                        $clasificacion = mysql_real_escape_string($object->get('clasificacion'));
                        $gerente = mysql_real_escape_string($object->get('gerente'));
                        $this->do_operation("UPDATE videojuego SET nombre='$nombre', descripcion='$descripcion', objetivo='$objetivo', genero='$genero', modalidad='$modalidad', clasificacion='$clasificacion', gerente='$gerente' WHERE id='$id';");

                        break;
                }
                break;
            case "persona":
                switch ($options['lvl2']) {
                    case "update":
                        $nombre = mysql_real_escape_string($object->get('nombre'));
                        $apellido = mysql_real_escape_string($object->get('apellido'));
                        $id = mysql_real_escape_string($object->get('id'));
                        $edad = mysql_real_escape_string($object->get('edad'));
                        $boss = mysql_real_escape_string($object->get('boss'));
                        
                       //OJO OJO OJO!! FALTA ACTUALIZAR EL ID CORRECTAMENTE. ES CON OLD_ID Y AUXILIARS (VER EL SIGUIENTE CASE)
                       
                        //$this->do_operation("UPDATE persona SET id='$id' , nombre='$nombre', apellido='$apellido' ,edad='$edad', boss='$boss' WHERE id='$id';");
                        $this->do_operation("UPDATE persona SET id='$id' , nombre='$nombre', apellido='$apellido',edad='$edad', boss='$boss' WHERE id='$id';");

                        break;
                }
                break;
            
            case "sonido":
                switch ($options['lvl2']) {
                    case "update":
                       
                        $id = mysql_real_escape_string($object->get('id'));
                        $nombre = mysql_real_escape_string($object->get('nombre')); 
                        $descripcion= mysql_real_escape_string($object->get('descripcion'));
                        $intencidad = mysql_real_escape_string($object->get('intensidad'));
                        $duracion = mysql_real_escape_string($object->get('duracion'));
                        $tipo = mysql_real_escape_string($object->get('tipo'));
                        $ingeniero_sonido = mysql_real_escape_string($object->get('ingeniero_sonido'));
                        $videojuego = mysql_real_escape_string($object->get('videojuego'));
                        $movimiento = mysql_real_escape_string($object->get('movimiento'));
                        
                        $this->do_operation("UPDATE sonido SET nombre='$nombre', descripcion='$descripcion', intensidad='$intencidad',  duracion='$duracion',  tipo='$tipo',ingeniero_sonido='$ingeniero_sonido', videojuego='$videojuego', movimiento='$movimiento' WHERE id='$id';");
                        
                        break;
                }
                break;
            
            case "historia":
                    switch ($options['lvl2']){
                        case "update":
                            $id = mysql_real_escape_string($object->get('id'));
                            $titulo = mysql_real_escape_string($object->get('titulo'));
                            $argumento = mysql_real_escape_string($object->get('argumento'));
                            $guion = mysql_real_escape_string($object->get('guion'));
                            $escritor = mysql_real_escape_string($object->get('escritor'));
                            $videojuego = mysql_real_escape_string($object->get('videojuego'));
                            $this->do_operation("update historia SET titulo='$titulo', argumento='$argumento', guion='$guion', escritor='$escritor', videojuego='$videojuego'  WHERE id='$id';");
                        break;
                    }
                break;
            
            default: break;
        }
    }

    //function for delete data from db
    public function delete($options, $object) {
        switch ($options['lvl1']) {
            case "user":
                switch ($options['lvl2']) {
                    case "normal":
                        //
                        break;
                }
                break;
            case "clerk":
                switch ($options['lvl2']) {
                    case "normal":
                        $id = mysql_real_escape_string($object->get('id'));
                        $this->do_operation("DELETE FROM clerk WHERE id='$id';");
                        break;
                }
                break;
            case "finca":
                switch ($options['lvl2']) {
                    case "normal":
                        $id = mysql_real_escape_string($object->get('id'));
                        $this->do_operation("DELETE FROM finca WHERE id='$id';");
                        break;
                }
                break;

            default: break;
        }
    }

    //function that returns an array with data from a operation
    public function select($option, $data) {
        $info = array();
        switch ($option['lvl1']) {
            case "user":
                switch ($option['lvl2']) {
                    case "one_login":
                        $user = mysql_real_escape_string($data['user']);
                        $password = mysql_real_escape_string($data['password']);
                        $result = $this->get_data("SELECT password, id FROM user WHERE user = '$user';");
                        $id = $result[0]->id;
                        $hasher = new PasswordHash(8, FALSE);
                        if ($hasher->CheckPassword($password, $result[0]->password)) {
                            $info = $this->get_data("SELECT name, user, type, id FROM user WHERE id = '$id';");
                        }
                        unset($hasher);
                        break;
                }
                break;
                 case "empleado":
                switch ($option['lvl2']) {
                    case "one_login":
                        $cedula = mysql_real_escape_string($data['cedula']);
                        $contrasena = mysql_real_escape_string($data['contrasena']);
                        
                        $result = $this->get_data("SELECT contrasena, cedula FROM empleado WHERE cedula = '$cedula';");
                        $cedula2 = $result[0]->cedula;
                        $hasher = new PasswordHash(8, FALSE);
                       echo $result[0]->cedula;
                        if ($hasher->CheckPassword($contrasena, $result[0]->contrasena)) {
                            echo $result[0]->contrasena;
                            $info = $this->get_data("SELECT nombre, cedula, cargo FROM empleado WHERE cedula = '$cedula2';");
                        }
                        unset($hasher);
                        break;
                }
                break;
                
                case "videojuego":
                switch ($option['lvl2']) {
                    case "id" :
                        $info = $this->get_data("SELECT id FROM videojuego;");
                        break;
                    case "nombre":
                        $info = $this->get_data("SELECT id, nombre FROM videojuego;");
                        break;
                    case "all" :
                        $info = $this->get_data("SELECT * FROM videojuego;");
                        break;
                    
                    case "one":
                        $id = mysql_real_escape_string($data['id']);
                        $info = $this->get_data("SELECT * FROM videojuego WHERE id = '$id';");
                        break;
                    case "historia":
                           $id = mysql_real_escape_string($data['historia']);
                           $info = $this->get_data("SELECT id, nombre FROM videojuego WHERE videojuego = '$id';");
                           break;
                       }
                     
					
                break;
				
	 case "movimiento":
                   switch ($option['lvl2']) {                        
                       case "nombre":
                           $info = $this->get_data("SELECT id, nombre FROM movimiento");
                           break;
                       }
                break;

             case "personaje":
                   switch ($option['lvl2']) {                        
                       case "nombre":
                           $info = $this->get_data("SELECT id,nombre FROM personje");
                           break;
                       case "videojuego":
                           $id = mysql_real_escape_string($data['videojuego']);
                           $info = $this->get_data("SELECT id, nombre FROM personaje WHERE videojuego = '$id'");
                           break;
                       }
                break;
             case "nivel":
                   switch ($option['lvl2']) {                        
                       case "nombre":
                           $info = $this->get_data("SELECT nombre FROM nivel");
                           break;
                       case "videojuego":
                           $id = mysql_real_escape_string($data['videojuego']);
                           $info = $this->get_data("SELECT id, nombre FROM nivel WHERE videojuego = '$id'");
                           break;
                       }
                break;
             case "sonido":
                   switch ($option['lvl2']) {                        
                       case "nombre":
                           $info = $this->get_data("SELECT id, nombre FROM sonido");
                           break;
                       case "videojuego":
                           $id = mysql_real_escape_string($data['videojuego']);
                           $info = $this->get_data("SELECT id, nombre FROM sonido WHERE videojuego = '$id'");
                           break;
                       case "one":
                        $id = mysql_real_escape_string($data['id']);
                        $info = $this->get_data("SELECT * FROM sonido WHERE id = '$id';");
                        break;
                       }
                break;
             case "historia":
                   switch ($option['lvl2']) {                        
                       case "titulo":
                           $info = $this->get_data("SELECT * FROM historia");
                           break;
                       
                       case "videojuego":
                           $id = mysql_real_escape_string($data['videojuego']);
                           $info = $this->get_data("SELECT id, titulo FROM historia WHERE videojuego = '$id'");
                           break;
                       
                       case "one":
                        $id = mysql_real_escape_string($data['id']);
                        $info = $this->get_data("SELECT * FROM historia WHERE id = '$id';");
                        break;
                       }
                break;
            
           
break;
                
            default: break;
        }
        return $info;
    }

    //close the db connection
    public function close() {
        if ($this->cn) {
            mysql_close($this->cn);
        }
    }

}

?>